@JsonGetter এবং @JsonSetter হল Jackson Annotations, যা JSON serialization এবং deserialization এর সময় Java মেথডগুলিকে নির্দিষ্টভাবে JSON ফিল্ডের সাথে ম্যাপ করার সুযোগ দেয়। এগুলি মূলত গেটার (getter) এবং সেটার (setter) মেথডের সাথে কাজ করে।
@JsonGetter এর ধারণা
@JsonGetter একটি গেটার মেথডকে JSON serialization এর সময় নির্দিষ্ট ফিল্ডের জন্য দায়ী করে। এটি @JsonProperty এর মতো কাজ করে, তবে শুধুমাত্র গেটার মেথডের জন্য প্রযোজ্য।
ব্যবহার
- JSON serialization এর সময় ফিল্ডের নাম কাস্টমাইজ করা।
- নির্দিষ্ট গেটার মেথডকে JSON ফিল্ডের জন্য ব্যবহার করা।
কোড উদাহরণ
import com.fasterxml.jackson.annotation.JsonGetter;
public class Person {
private String firstName;
private String lastName;
// Constructor
public Person(String firstName, String lastName) {
this.firstName = firstName;
this.lastName = lastName;
}
@JsonGetter("full_name") // Map this getter to JSON field "full_name"
public String getFullName() {
return firstName + " " + lastName;
}
public String getFirstName() {
return firstName;
}
public String getLastName() {
return lastName;
}
}
Serialization Example
import com.fasterxml.jackson.databind.ObjectMapper;
public class JsonGetterExample {
public static void main(String[] args) throws Exception {
ObjectMapper mapper = new ObjectMapper();
Person person = new Person("John", "Doe");
// Serialize to JSON
String json = mapper.writeValueAsString(person);
System.out.println(json); // Output: {"full_name":"John Doe","firstName":"John","lastName":"Doe"}
}
}
@JsonSetter এর ধারণা
@JsonSetter একটি সেটার মেথডকে JSON deserialization এর সময় নির্দিষ্ট ফিল্ডের জন্য দায়ী করে। এটি JSON ডেটা থেকে Java ফিল্ড সেট করার জন্য ব্যবহৃত হয়।
ব্যবহার
- JSON deserialization এর সময় ফিল্ডের নাম কাস্টমাইজ করা।
- নির্দিষ্ট সেটার মেথডকে JSON ফিল্ডের জন্য ব্যবহার করা।
কোড উদাহরণ
import com.fasterxml.jackson.annotation.JsonSetter;
public class Person {
private String name;
private int age;
// Constructor
public Person() {}
public String getName() {
return name;
}
@JsonSetter("full_name") // Map this setter to JSON field "full_name"
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
Deserialization Example
import com.fasterxml.jackson.databind.ObjectMapper;
public class JsonSetterExample {
public static void main(String[] args) throws Exception {
ObjectMapper mapper = new ObjectMapper();
String json = "{\"full_name\":\"Jane Doe\",\"age\":25}";
// Deserialize JSON to Java Object
Person person = mapper.readValue(json, Person.class);
System.out.println(person.getName()); // Output: Jane Doe
System.out.println(person.getAge()); // Output: 25
}
}
@JsonGetter এবং @JsonSetter একত্রে ব্যবহার
কোড উদাহরণ
import com.fasterxml.jackson.annotation.JsonGetter;
import com.fasterxml.jackson.annotation.JsonSetter;
public class Employee {
private String employeeName;
private double salary;
@JsonGetter("employee_name") // Serialize as "employee_name"
public String getEmployeeName() {
return employeeName;
}
@JsonSetter("employee_name") // Deserialize from "employee_name"
public void setEmployeeName(String employeeName) {
this.employeeName = employeeName;
}
@JsonGetter("monthly_salary") // Serialize as "monthly_salary"
public double getSalary() {
return salary;
}
@JsonSetter("monthly_salary") // Deserialize from "monthly_salary"
public void setSalary(double salary) {
this.salary = salary;
}
}
Serialization এবং Deserialization Example
import com.fasterxml.jackson.databind.ObjectMapper;
public class JsonGetterSetterExample {
public static void main(String[] args) throws Exception {
ObjectMapper mapper = new ObjectMapper();
// Serialize
Employee employee = new Employee();
employee.setEmployeeName("Alice");
employee.setSalary(5000.0);
String json = mapper.writeValueAsString(employee);
System.out.println(json); // Output: {"employee_name":"Alice","monthly_salary":5000.0}
// Deserialize
String jsonInput = "{\"employee_name\":\"Bob\",\"monthly_salary\":4500.0}";
Employee deserializedEmployee = mapper.readValue(jsonInput, Employee.class);
System.out.println(deserializedEmployee.getEmployeeName()); // Output: Bob
System.out.println(deserializedEmployee.getSalary()); // Output: 4500.0
}
}
@JsonGetter এবং @JsonSetter এর সুবিধা
- Custom Naming:
- JSON serialization/deserialization এর সময় ফিল্ডের কাস্টম নাম ব্যবহার করতে দেয়।
- Backward Compatibility:
- পুরোনো কোডের সাথে JSON ফরম্যাট সামঞ্জস্য রাখতে সহায়তা করে।
- Selective Control:
- নির্দিষ্ট মেথডের মাধ্যমে serialization এবং deserialization পরিচালনা করা যায়।
- Readability:
- JSON ফিল্ডের সাথে সম্পর্ক সহজে বোঝা যায়।
ব্যবহার ক্ষেত্র
- REST API Development:
- JSON ডেটা কাস্টমাইজড ফিল্ড নামে প্রক্রিয়া করতে।
- Data Processing:
- JSON থেকে Java অবজেক্ট এবং Java অবজেক্ট থেকে JSON তৈরি করতে।
- Complex Data Models:
- যেখানে কাস্টম serialization/deserialization প্রয়োজন।
@JsonGetter এবং @JsonSetter অ্যানোটেশনগুলি Jackson-এর মাধ্যমে JSON serialization এবং deserialization আরও কাস্টমাইজড এবং নিয়ন্ত্রিত করতে সাহায্য করে।
@JsonGetter: JSON ফিল্ড তৈরির জন্য নির্দিষ্ট গেটার মেথড ব্যবহার করে।@JsonSetter: JSON ডেটা থেকে ফিল্ড সেট করার জন্য নির্দিষ্ট সেটার মেথড ব্যবহার করে।
এই অ্যানোটেশনগুলি REST API এবং JSON প্রক্রিয়াকরণের ক্ষেত্রে খুবই কার্যকর।
Read more